import lableAll from "../../utils/mapLable";

const lable = lableAll.getAllLable();
const apiService = require('../../utils/yxqzutil.js'); //接口请求工具
const app = getApp();

const urlPositionList = app.globalData.urlPositionList;
const urlWechatMotionAdd = app.globalData.urlWechatMotionAdd;
const urlWechatMotionList = app.globalData.urlWechatMotionList;
const userInfo = wx.getStorageSync('userInfo')
// 暂时写死
const optiondata = {
    //     openid: 'o795o5ArMQ8S9SK_RQZsULNTZo-Q'
    openid: userInfo.openid
};

Page({

    data: {
        title: "科技城人才公园",
        zhuangbei: "cloud://tfjkp-0ge80vu9ea710148.7466-tfjkp-0ge80vu9ea710148-1305195523/myjkp/checkInPage/publicIcon/zhuangbei.png",
        xianlu: "cloud://tfjkp-0ge80vu9ea710148.7466-tfjkp-0ge80vu9ea710148-1305195523/myjkp/checkInPage/publicIcon/xianlu.png",
        currentTabName: "健走", // 默认显示的 Tab 名称
        longitude: 0, //地图经纬度
        latitude: 0, //地图经纬度
        markers: [{
            id: 1,
            callout: {
                content: '打豆豆',
                padding: 10,
                borderRadius: 2,
                display: 'ALWAYS'
            },
            latitude: 31.474161769532405,
            longitude: 104.69788044691086,
            iconPath: '../../../images/map/imgs/Marker1_Activated@3x.png',
            width: '34px',
            height: '34px',
            rotate: 0,
            alpha: 1
        }, {
            id: 2,
            callout: {
                content: '吃饭饭',
                padding: 10,
                borderRadius: 2,
                display: 'ALWAYS'
            },
            latitude: 31.470869868332656,
            longitude: 104.69845712184902,
            iconPath: '../../../images/map/imgs/Marker1_Activated@3x.png',
            width: '34px',
            height: '34px',
            rotate: 0, //旋转角度
            alpha: 1 //标注的透明度
        }],
        polyline: [{
            points: [{
                    latitude: 31.472019416132454,
                    longitude: 104.69658628106114,
                },
                {
                    latitude: 31.47311976607527,
                    longitude: 104.69666540622711,
                },
                {
                    latitude: 31.474168632304856,
                    longitude: 104.69703018665312,
                },
                {
                    latitude: 31.474161769532405,
                    longitude: 104.69788044691086,
                },
                {
                    latitude: 31.473029405184956,
                    longitude: 104.69933554530141,
                },
                {
                    latitude: 31.471879869789223,
                    longitude: 104.69983980059621,
                },
                {
                    latitude: 31.470876731346475,
                    longitude: 104.69948977231977,
                },
                {
                    latitude: 31.47105516952945,
                    longitude: 104.6991357207298,
                },
                {
                    latitude: 31.470869868332656,
                    longitude: 104.69845712184902,
                },
                {
                    latitude: 31.472019416132454,
                    longitude: 104.69658628106114,
                },
            ],
            color: "#0597ff",
            width: 2,
            dottedLine: false // 是否为虚线
        }],
        positionList: [], //站点位置信息列表
        motionData: {
            openid: userInfo.openid, //用户的openid
            status: 0, //用户状态
            name: '2024第四季度第一期', //运动周期名称
            duration: 0, //用户本次运动运动的持续时间，以秒为单位
            caloriesBurned: 0, //燃烧的卡路里数
            averageSpeed: 0, //用户本次运动的平均运动速度
            maxSpeed: 0, //用户本次运动的最大运动速度
            heartRate: 0, //平均心率 次/每分钟
            description: '跑步运动', //描述
        },
        motionOptionData: {
            openid: userInfo.openid, //用户的openid
            status: 0, //用户状态
        },
    },
    onTabSelect(e) {
        const tabName = e.currentTarget.dataset.name; // 获取 Tab 名称
        this.setData({
            currentTabName: tabName
        });
    },
    onShow: function () {},
    onLoad: function () {
        this.mapContext = wx.createMapContext('runMap', this);
        this.doPositionList();
        this.getLocation();
    },
    /**
     * 用户开始运动时调用，首先打印日志，然后调用VerifyIsSport函数检查用户是否已有运动记录，
     * 如果没有，则调用wechatMotionAdd函数添加运动记录，并导航到跑步详情页面。
     */
    startSport() {
        console.log('[run.js]开始------------------------------------------------------------------------------------')
        console.log('[run.js]用户开始运动')

        this.VerifyIsSport(urlWechatMotionList, this.data.motionOptionData).then(res => {
            console.log('[run.js]查看[this.data.motionOptionData]的数据（yxqz）：', res);
            if (res) {
                this.wechatMotionAdd(urlWechatMotionAdd, this.data.motionData).then(response => {
                    if (response !== null) {
                        console.log('[run.js][运动记录]接口请求成功接口返回的数据：', response);
                    }
                })
            }
        });
        // 获取当前时间戳并保存到本地缓存
        const startTime = new Date().getTime();
        wx.setStorageSync('startTime', startTime); // 将开始时间保存到本地缓存
        wx.navigateTo({
            url: '/pages/checkin/rundetails/rundetails',
        });
        // 启动计时器
        // this.startTimer();
    },
    /**
     * 异步函数，用于检查用户是否已有运动记录。
     * @param url
     * @param optionData
     * @returns {Promise<boolean>}
     * @constructor
     */
    VerifyIsSport: async function (url, optionData) {
        try {
            const wechatMotionService = await apiService.wxRequestPromise({
                url: url,
                method: 'POST',
                data: optionData,
                header: {
                    'content-type': 'application/x-www-form-urlencoded',
                    'charset': 'UTF-8'
                },
            });
            console.log('[run.js]查询当前用户的运动记录信息(yxqz)：', wechatMotionService)
            console.log('[run.js]查询当前用户的运动记录信息----(yxqz)：', wechatMotionService.rows)

            // 检查 wechatMotionService.rows 是否存在且非空数组
            if (Array.isArray(wechatMotionService.rows) && wechatMotionService.rows.length > 0) {
                wx.setStorageSync("motion", wechatMotionService.rows[0]);
                console.log('[run.js]查询当前缓存[motion]信息：', wechatMotionService.rows[0])
                return false; // 表示存在运动记录
            } else {
                return true; // 表示不存在运动记录
            }
        } catch (error) {
            console.error('请求运动记录接口失败：', error);
            throw error; // 向外抛出错误
        }
    },
    /**
     * 异步函数，用于向服务器发送添加运动记录的请求。
     * @param url
     * @param motionData
     * @returns {Promise<*>}
     */
    wechatMotionAdd: async function (url, motionData) {
        try {
            const wechatMotionService = await apiService.wxRequestPromise({
                url: url,
                method: 'POST',
                data: motionData,
                header: {
                    'content-type': 'application/x-www-form-urlencoded',
                    'charset': 'UTF-8'
                },
            });
            return wechatMotionService; // 返回请求结果
        } catch (error) {
            console.error('请求运动记录接口失败：', error);
            throw error; // 向外抛出错误
        }
        return null;
    },

    hideModal(e) {
        this.setData({
            modalName: null
        })
    },
    /**
     * 获取用户的地理位置，并更新页面数据，然后移动地图视图到用户位置。
     */
    getLocation: function () {
        const that = this;
        wx.getLocation({
            type: 'wgs84',
            success(res) {
                const latitude = res.latitude;
                const longitude = res.longitude;

                that.setData({
                    latitude: latitude,
                    longitude: longitude,
                    // height: wx.getSystemInfoSync().windowHeight - 150,
                });
                that.mapContext.moveToLocation();
            }
        });
    },
    /**
     * 异步函数，用于获取站点位置列表，并更新页面的positionList和markers数据。
     * @returns {Promise<void>}
     */
    async doPositionList() {
        console.log('----------------------------------------------------------------------')
        try {
            const positionListRes = await this.getPositionList();
            this.setData({
                positionList: positionListRes.rows,
                markers: this.createMarkers(positionListRes.rows)
            });
            wx.setStorageSync('positionList', positionListRes.rows);
            console.log('获取positionListRes.rows的信息：', positionListRes.rows);
        } catch (error) {
            console.error('请求站点位置列表失败：', error);
        }
    },
    /**
     * 异步函数，用于请求站点位置列表。
     * @returns {Promise<*>}
     */
    getPositionList: async function () {
        return apiService.wxRequestPromise({
            url: urlPositionList,
            method: 'POST',
            header: {
                'content-type': 'application/x-www-form-urlencoded',
                'charset': 'UTF-8'
            },
        });
    },
    /**
     * 根据位置列表创建地图标记点。
     * @param positionList
     * @returns {*}
     */
    createMarkers(positionList) {
        return positionList.map((row, index) => ({
            id: index + 5,
            callout: {
                content: row.name,
                padding: 10,
                borderRadius: 2,
                display: 'ALWAYS'
            },
            latitude: row.latitude,
            longitude: row.longitude,
            iconPath: '../../../images/map/imgs/Marker1_Activated@3x.png',
            width: '34px',
            height: '34px',
            rotate: 0,
            alpha: 1
        }));
    },
});
